/**
 * 环境变量工具类
 * 提供统一的环境变量获取和处理方法
 */

/**
 * 获取环境变量，支持默认值
 * @param {string} key 环境变量键名
 * @param {any} defaultValue 默认值
 * @returns {any} 环境变量值或默认值
 */
export const getEnvVar = (key, defaultValue = null) => {
  // 在客户端环境中使用 import.meta.env 获取环境变量
  const value = import.meta.env[key];
  return value !== undefined ? value : defaultValue;
};

/**
 * 获取布尔类型的环境变量
 * @param {string} key 环境变量键名
 * @param {boolean} defaultValue 默认值
 * @returns {boolean} 布尔值
 */
export const getEnvBool = (key, defaultValue = false) => {
  const value = getEnvVar(key, defaultValue);
  if (typeof value === "boolean") return value;
  if (typeof value === "string") {
    return value.toLowerCase() === "true" || value === "1";
  }
  return Boolean(value);
};

/**
 * 获取数字类型的环境变量
 * @param {string} key 环境变量键名
 * @param {number} defaultValue 默认值
 * @returns {number} 数字值
 */
export const getEnvNumber = (key, defaultValue = 0) => {
  const value = getEnvVar(key, defaultValue);
  const num = Number(value);
  return isNaN(num) ? defaultValue : num;
};

/**
 * 获取当前环境模式
 * @returns {string} 环境模式 ('development' | 'production' | 'test')
 */
export const getNodeEnv = () => {
  return getEnvVar("NODE_ENV", "development");
};

/**
 * 检查是否为开发环境
 * @returns {boolean} 是否为开发环境
 */
export const isDev = () => {
  return getNodeEnv() === "development";
};

/**
 * 检查是否为生产环境
 * @returns {boolean} 是否为生产环境
 */
export const isProd = () => {
  return getNodeEnv() === "production";
};

/**
 * 获取API基础URL
 * @returns {string} API基础URL
 */
export const getApiBaseUrl = () => {
  return getEnvVar("VITE_API_BASE_URL", "/api");
};

/**
 * 获取应用标题
 * @returns {string} 应用标题
 */
export const getAppTitle = () => {
  return getEnvVar("VITE_APP_TITLE", "UniApp");
};

export default {
  getEnvVar,
  getEnvBool,
  getEnvNumber,
  getNodeEnv,
  isDev,
  isProd,
  getApiBaseUrl,
  getAppTitle,
};
